import org.json.JSONArray;
import org.json.JSONObject;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author WGG
 * @create 2023-08-05 11:32
 */
public class SimpleGUIApp extends JFrame{


    // 储存报表元素信息的JSONArray
    private JSONArray reportElements;

    public SimpleGUIApp() {
        initComponents();
        reportElements = new JSONArray(); // 初始化空的JSONArray
    }

    private void initComponents() {
        // 设置窗口标题
        setTitle("报表设计器");

        // 设置窗口图标为空图标
        setIconImage(new ImageIcon("").getImage());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        // 创建报表元素面板
        JPanel reportElementPanel = new JPanel();
        reportElementPanel.setLayout(null); // 使用null布局，允许自由调整报表元素位置
        reportElementPanel.setBackground(Color.WHITE);
        JScrollPane scrollPane = new JScrollPane(reportElementPanel);
        add(scrollPane, BorderLayout.CENTER);

        // 创建控制面板
        JPanel controlPanel = new JPanel();
        JButton addButton = new JButton("添加元素");
        JButton saveButton = new JButton("保存");
        JButton previewButton = new JButton("预览");
        controlPanel.add(addButton);
        controlPanel.add(saveButton);
        controlPanel.add(previewButton);
        add(controlPanel, BorderLayout.SOUTH);

        // 设置按钮的字体样式
        Font buttonFont = new Font("微软雅黑", Font.PLAIN, 14);
        addButton.setFont(buttonFont);
        saveButton.setFont(buttonFont);
        previewButton.setFont(buttonFont);

        // 设置按钮的背景色和前景色
        addButton.setBackground(Color.BLUE);
        addButton.setForeground(Color.WHITE);
        saveButton.setBackground(Color.GREEN);
        saveButton.setForeground(Color.BLACK);
        previewButton.setBackground(Color.ORANGE);
        previewButton.setForeground(Color.WHITE);

        // 添加按钮点击事件监听器
        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 在报表元素面板上添加新的报表元素
                JLabel element = new JLabel("报表元素");
                element.setBounds(50, 50, 100, 50); // 设置元素位置和大小
                element.setOpaque(true);
                element.setBackground(Color.YELLOW); // 设置元素背景颜色
                reportElementPanel.add(element);
                reportElementPanel.revalidate();
                reportElementPanel.repaint();

                // 保存报表元素信息到JSONArray
                JSONObject elementInfo = new JSONObject();
                elementInfo.put("x", 50);
                elementInfo.put("y", 50);
                elementInfo.put("width", 100);
                elementInfo.put("height", 50);
                reportElements.put(elementInfo);
            }
        });

        saveButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 保存报表设计，实现保存逻辑
                JOptionPane.showMessageDialog(SimpleGUIApp.this, "报表设计已保存");
            }
        });

        previewButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 预览报表，实现预览逻辑
                JOptionPane.showMessageDialog(SimpleGUIApp.this, "预览报表");
                // 保存报表设计，实现保存逻辑
                saveReportDesign();
            }
        });
        // 设置窗口的初始大小为800x600像素
        setSize(800, 600);
        setLocationRelativeTo(null); // 将窗口居中显示
    }
    // 将报表设计保存到文件
    private void saveReportDesign() {
        JFileChooser fileChooser = new JFileChooser();
        int result = fileChooser.showSaveDialog(this);
        if (result == JFileChooser.APPROVE_OPTION) {
            try (FileWriter fileWriter = new FileWriter(fileChooser.getSelectedFile())) {
                fileWriter.write(reportElements.toString(4)); // 将JSONArray以缩进格式写入文件
                fileWriter.flush();
                JOptionPane.showMessageDialog(this, "报表设计已保存");
            } catch (IOException ex) {
                ex.printStackTrace();
                JOptionPane.showMessageDialog(this, "保存失败：" + ex.getMessage());
            }
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new SimpleGUIApp().setVisible(true);
            }
        });
    }
}
